#!/usr/bin/python3
# -*- coding: UTF-8 -*-

# 在Python中，定义一个函数要使用def语句，依次写出函数名、括号、括号中的参数和冒号:，
# 然后，在缩进块中编写函数体，函数的返回值用return语句返回

# 自定义一个求绝对值的my_abs函数
def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >=0:
        return x
    else:
        return -x

# 如果想定义一个什么事也不做的空函数，可以用pass语句
def nop():
    pass

import math
# 游戏中经常需要从一个点移动到另一个点，给出坐标、位移和角度，就可以计算出新的新的坐标
def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y + step * math.sin(angle)
    return nx, ny

# 返回值是一个tuple
print(move(10, 10, 3, 15))
print("===>", move(100, 100, 60, math.pi / 6))


# 定义一个函数quadratic(a, b, c)，接收3个参数，返回一元二次方程
# ax2 + bx + c = 0 的两个解

def quadratic(a, b, c):
    if not isinstance(a, (int, float)):
        raise TypeError('bad operand type')
    if not isinstance(b, (int, float)):
        raise TypeError('bad operand type')
    if not isinstance(c, (int, float)):
        raise TypeError('bad operand type')
    if a == 0:
        return -c/b
    if b * b - 4 * a * c < 0:
        return None
    return (math.sqrt((b * b)/ (4 * a * a) - c / a) - b/2/a, -(math.sqrt((b * b)/ (4 * a * a) - c / a)) - b/2/a)

print(quadratic(2, 3, 1))
print(quadratic(1, 3, -4))
print(quadratic(1, 2, 1))
